This invention relates to the field of electronic communications. More particularly, a system and methods are provided for enabling dynamic rate flow control between two communicating entities.
Flow control is one of the basic mechanisms for enabling effective transfer of data or other electronic information. A sending entity may be able to prepare and transmit data faster than a receiving entity can receive and unload it, or faster than an intermediate device (e.g., switch, router) between the sending and receiving entities can process it. Flow control allows the rate of data transfer to be adjusted in order to prevent the slower device from losing information.
Several methods of flow control have been proposed or attempted, for various types of data transfer systems or environments. For example, the use of differentiated services in Ethernet networks enables packets to be prioritized or classified at any of a number of levels. However, there are generally no criteria established for accepting or rejecting a packet's claim to a particular priority, and therefore a class or priority of service may become over-subscribed. If a large number of data streams transiting one device (e.g., a switch) claim the same priority, contention between them may prevent the device from providing the expected level of service.
Some Ethernet systems employ a flow control scheme known as RSVP (Resource Reservation Protocol), in which intermediate routing devices reserve buffers for data streams. However, in this scheme each device must be configured with RSVP in order to for the system to take full advantage of its benefits. Many Ethernet networks contain a heterogeneous mixture of routing and switching devices, some of which are not equipped for RSVP and therefore cannot provide buffer allocation. Further, while RSVP guarantees no packet loss, it cannot assure a maximum latency. As a result, packets of any priority could be delayed for a significant period of time.
In other types of networks or data transfer systems, other schemes have been suggested. In one other scheme, communicating entities employ credits to allocate buffer space. A sending entity must receive a credit from a receiving entity before it can transmit, and the amount of data it may send may be limited by the number of credits it possesses. This scheme does nothing to prevent or alleviate congestion at intermediate devices between the sending and receiving entities. For example, a switch may receive traffic from many sending entities for one receiving entity simultaneously. Even though the receiving entity may be configured to handle the full amount of traffic (e.g., has issued appropriate credits), the traffic may be too much for the switch to handle at once. As a result, latency may become too large for some traffic.
Thus, existing flow control schemes are not designed to prevent or avoid congestion at intermediate devices or locations between sending and receiving entities. In particular, existing schemes do no manage latency effectively.